Menu Close

Systemd服务无目录访问权限导致服务无法启动

1. 故障现象(SYMPTOMS)

启动mariadb服务时,报如下错误:

[text]
can’t create test file xxxxx.lower-test
failed to set environment: access denied
[system] rejected send message, 2 matched rules; type=”method_call”, sender=”:1.203″ (uid=1000 pid=4064 comm=”systemctl unset-environment

2. 变化(CHANGES)

3. 故障原因(CAUSE)

安装 mariadb 时将数据文件的位置放在了 /home 目录下,而 Systemd 服务配置中默认配置 /home 目录是受保护的,不允许读写,导致服务无法启动。

4. 解决方案(SOLUTION)

  • a. 优先检查文件的目录权限

  • b. 其次检查服务启动文件
    ProtectHome 可以设置为 true、false、read-only。 设置为 true 的时候,/home/root/run/user 对应用不可见。设置为 read-only, 上述三个目录对应用只读。设置为 false, 则应用可以正常访问这三个目录。 默认值是 true。为了保证应用不能访问用户私有数据, 建议所有长时间运行的服务开启该选项。
    ProtectSystem 可以设置为 true/false/full。 设置为 true时,/usr/boot 目录被设置为只读。 设置为 full时,/usr/boot/etc 目录被设置为只读。 设置为 false时,则应用可以正常访问上述目录。这个选项可以保护系统目录不会被应用修改, 建议所有长时间运行的服务开启该选项。
    file

  • c. 最后检查 SELinux

5. 总结(SUMMARY)

当前的需求是 /home 目录访问权限,则只需要修改 ProtectHome 参数为 false 即可。至此重启服务,一切功能正常。

[shell]
systemctl daemon-reload
systemctl restart mariadb

必须首先重新加载systemd的配置,否则不生效。

附录A. 相关联的文章

附录B. 其他参考